package com.zhang.study.chapter02;

import java.util.Arrays;
import java.util.HashMap;

import static com.zhang.util.RandomArrayUtil.generateRandomArrayWithOddAndEven;

/**
 * @author zhang
 * @date 2023/11/21 16:12\
 * @description 一个数组中有一种数出现了奇数次，其他数都出现了偶数次，怎么找到并打印这种数
 */
public class Code01_EvenTimesOddTimes {

    /**
     * 一个数组中有一种数出现了奇数次，其他数都出现了偶数次，怎么找到并打印这种数
     *
     * @param arr 数组
     * @return 奇数次的数
     */
    public static int printOddTimesNum1(int[] arr) {
        int eor = 0;
        for (int j : arr) {
            eor ^= j;
        }
        return eor;
    }

    public static int test(int[] arr) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i : arr) {
            if (map.containsKey(i)) {
                map.put(i, map.get(i) + 1);
            } else {
                map.put(i, 1);
            }
        }
        for (int i : arr) {
            if (map.get(i) % 2 == 1) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int maxSize = 100; // 假设最大长度为10
        int maxVal = 100; // 假设允许的最大值为100
        int times = 100000;
        for (int i = 0; i < times; i++) {
            int[] randomArray = generateRandomArrayWithOddAndEven(maxSize, maxVal, 1);
            int ans1 = printOddTimesNum1(randomArray);
            int ans2 = test(randomArray);
            if (ans1 != ans2) {
                System.out.println("ans1 = " + ans1 + " ans2 = " + ans2);
                System.out.println(Arrays.toString(randomArray));
                return;
            }
        }
        System.out.println("Nice!");

    }
}
